# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Firestore.V1beta1.Model.PartitionQueryRequest do
  @moduledoc """
  The request for Firestore.PartitionQuery.

  ## Attributes

  *   `pageSize` (*type:* `integer()`, *default:* `nil`) - The maximum number of partitions to return in this call, subject to `partition_count`. For example, if `partition_count` = 10 and `page_size` = 8, the first call to PartitionQuery will return up to 8 partitions and a `next_page_token` if more results exist. A second call to PartitionQuery will return up to 2 partitions, to complete the total of 10 specified in `partition_count`.
  *   `pageToken` (*type:* `String.t`, *default:* `nil`) - The `next_page_token` value returned from a previous call to PartitionQuery that may be used to get an additional set of results. There are no ordering guarantees between sets of results. Thus, using multiple sets of results will require merging the different result sets. For example, two subsequent calls using a page_token may return: * cursor B, cursor M, cursor Q * cursor A, cursor U, cursor W To obtain a complete result set ordered with respect to the results of the query supplied to PartitionQuery, the results sets should be merged: cursor A, cursor B, cursor M, cursor Q, cursor U, cursor W
  *   `partitionCount` (*type:* `String.t`, *default:* `nil`) - The desired maximum number of partition points. The partitions may be returned across multiple pages of results. The number must be positive. The actual number of partitions returned may be fewer. For example, this may be set to one fewer than the number of parallel queries to be run, or in running a data pipeline job, one fewer than the number of workers or compute instances available.
  *   `readTime` (*type:* `DateTime.t`, *default:* `nil`) - Reads documents as they were at the given time. This must be a microsecond precision timestamp within the past one hour, or if Point-in-Time Recovery is enabled, can additionally be a whole minute timestamp within the past 7 days.
  *   `structuredQuery` (*type:* `GoogleApi.Firestore.V1beta1.Model.StructuredQuery.t`, *default:* `nil`) - A structured query. Query must specify collection with all descendants and be ordered by name ascending. Other filters, order bys, limits, offsets, and start/end cursors are not supported.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :pageSize => integer() | nil,
          :pageToken => String.t() | nil,
          :partitionCount => String.t() | nil,
          :readTime => DateTime.t() | nil,
          :structuredQuery => GoogleApi.Firestore.V1beta1.Model.StructuredQuery.t() | nil
        }

  field(:pageSize)
  field(:pageToken)
  field(:partitionCount)
  field(:readTime, as: DateTime)
  field(:structuredQuery, as: GoogleApi.Firestore.V1beta1.Model.StructuredQuery)
end

defimpl Poison.Decoder, for: GoogleApi.Firestore.V1beta1.Model.PartitionQueryRequest do
  def decode(value, options) do
    GoogleApi.Firestore.V1beta1.Model.PartitionQueryRequest.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Firestore.V1beta1.Model.PartitionQueryRequest do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
